import { Socket } from 'net';
import { shell } from 'electron';
let electronSocket;

export = (socket: Socket) => {
    electronSocket = socket;
    socket.on('shell-showItemInFolder', (fullPath) => {
        shell.showItemInFolder(fullPath);

        electronSocket.emit('shell-showItemInFolderCompleted');
    });

    socket.on('shell-openPath', async (path) => {
        const errorMessage = await shell.openPath(path);

        electronSocket.emit('shell-openPathCompleted', errorMessage);
    });

    socket.on('shell-openExternal', async (url, options) => {
        let result = '';

        if (options) {
            await shell.openExternal(url, options).catch(e => {
                result = e.message;
            });
        } else {
            await shell.openExternal(url).catch((e) => {
                result = e.message;
            });
        }

        electronSocket.emit('shell-openExternalCompleted', result);
    });

    socket.on('shell-trashItem', async (fullPath, deleteOnFail) => {
        let success = false;

        try {
            await shell.trashItem(fullPath);
            success = true;
        } catch (error) {
            success = false;
        }

        electronSocket.emit('shell-trashItem-completed', success);
    });

    socket.on('shell-beep', () => {
        shell.beep();
    });

    socket.on('shell-writeShortcutLink', (shortcutPath, operation, options) => {
        const success = shell.writeShortcutLink(shortcutPath, operation, options);

        electronSocket.emit('shell-writeShortcutLinkCompleted', success);
    });

    socket.on('shell-readShortcutLink', (shortcutPath) => {
        const shortcutDetails = shell.readShortcutLink(shortcutPath);

        electronSocket.emit('shell-readShortcutLinkCompleted', shortcutDetails);
    });
};
